% Author: Christian Lillini
% Date: 14/10/2011
% Progetto: Forza 4
% File: Predicati che agiscono sullo stato

%Predicato che dato un giocatore restituisce l'avversario
alterna(Giocatore1,Giocatore2):-giocatore1(Giocatore1),giocatore2(Giocatore2),!.
alterna(Giocatore2,Giocatore1):-giocatore1(Giocatore1),giocatore2(Giocatore2).

%Esegue la mossa di un giocatore in uno stato iniziale
esegui_mossa(Giocatore,Colonna,Stato_iniziale,Stato_finale):-ultimo_gettone_colonna(Stato_iniziale,Colonna,Y),
                                                             Y<6,
                                                             Y2 is Y+1,
                                                             Stato_finale=[cella(Colonna,Y2,Giocatore)|Stato_iniziale].
esegui_mossa(_,Colonna,Stato_iniziale,Stato_iniziale):-ultimo_gettone_colonna(Stato_iniziale,Colonna,Y),
                                                       Y>=6.

%Calcola il numero di riga dell'ultima cella occupata nella colonna
ultimo_gettone_colonna(Tavola,Colonna,Y):-selezione_colonna(Tavola,Colonna,Lista_colonna),max_gettone_colonna(Lista_colonna,0,Y).

%Seleziona una colonna specificata del tavolo
selezione_colonna([],_,[]).
selezione_colonna([cella(Colonna,Y,G)|T],Colonna,[cella(Colonna,Y,G)|T2]):-selezione_colonna(T,Colonna,T2),!.
selezione_colonna([_|T],Colonna,Lista_colonna):-selezione_colonna(T,Colonna,Lista_colonna).

%Calcola l'ultima cella occupata
max_gettone_colonna([],Max,Max).
max_gettone_colonna([cella(_,Y,_)|T],Max,Y2):-Y>Max,max_gettone_colonna(T,Y,Y2),!.
max_gettone_colonna([_|T],Max,Y):-max_gettone_colonna(T,Max,Y).

                                      

